<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 原型链的继承---有一个问题传参，改变数组
    // function Fun(uname, age) {
    //   console.log(this)
    //   this.uname = uname
    //   this.age = age
    //   this.arr = [1, 2, 3]  //数组的内容得以改变的原因可能在于给的是地址
    //   this.a = 2
    // }
    // Fun.prototype.sayHello = function () {
    //   console.log('hello~')
    // }

    // function Gg() { }

    // Gg.prototype = new Fun()

    // const str1 = new Gg()
    // const str2 = new Gg()
    // str1.a = 3
    // str1.arr.push(2)
    // console.log(str1)
    // console.log(str2)

    //引申出了构造函数的继承--但是无法使用Fun 原型上面的函数
    // function Fun(uname, age) {
    //   console.log(this)
    //   this.uname = uname
    //   this.age = age
    //   this.arr = [1, 2, 3]  //数组的内容得以改变的原因可能在于给的是地址
    //   this.a = 2
    // }
    // Fun.prototype.sayHello = function () {
    //   console.log('hello~')
    // }

    // function Gg(uname, age) {
    //   Fun.call(this, uname, age)
    // }

    // const str1 = new Gg('zs', 18)
    // const str2 = new Gg('ls', 20)
    // str1.a = 3
    // str1.arr.push(2)
    // console.log(str1)
    // console.log(str2)

    //组合式继承
    // function Fun(uname, age) {
    //   console.log(this)
    //   this.uname = uname
    //   this.age = age
    //   this.arr = [1, 2, 3]  //数组的内容得以改变的原因可能在于给的是地址
    //   this.a = 2
    // }
    // Fun.prototype.sayHello = function () {
    //   console.log('hello~')
    // }

    // function Gg(uname, age) {
    //   Fun.call(this, uname, age)
    // }

    // Gg.prototype=new Fun()

    // const str1 = new Gg('zs', 18)
    // const str2 = new Gg('ls', 20)
    // str1.a = 3
    // str1.arr.push(2)
    // console.log(str1)
    // console.log(str2)

    //寄生式继承
    // function Fun(uname, age) {
    //   console.log(this)
    //   this.uname = uname
    //   this.age = age
    //   this.arr = [1, 2, 3]  //数组的内容得以改变的原因可能在于给的是地址
    //   this.a = 2
    // }
    // Fun.prototype.sayHello = function () {
    //   console.log('hello~')
    // }

    // function Gg(uname, age) {
    //   Fun.call(this, uname, age)
    // }

    // // Gg.prototype = new Fun()  //减少Fun的一次运行
    // Gg.prototype = Object.create(Fun.prototype)

    // const str1 = new Gg('zs', 18)
    // const str2 = new Gg('ls', 20)
    // str1.a = 3
    // str1.arr.push(2)
    // console.log(str1)
    // console.log(str2)

    







  </script>
</body>

</html>